package xyz.bali16.application.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;


@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Menu implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 菜单id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 菜单名称
     */
    private String menuName;

    /**
     * 菜单描述
     */
    private String description;

    /**
     * 组件类型
     */
    private String component;

    /**
     * 权限访问路径
     */
    private String url;
    /**
     * 权限标识, 多个可用逗号分隔
     */
    private String permissions;

    /**
     * 父菜单id,如果是顶级菜单, 则为0
     */
    private Long parentId;

    /**
     * 类型(0: 目录、1: 菜单、2: 权限)
     */
    private Integer type;

    /**
     * 排序，数字越小越靠前
     */
    private Integer orderNum;

    /**
     * 图标
     */
    private String icon;
    /**
     * 状态：1有效; 0无效
     */
    private Integer status;

    /**
     * 是否为插件菜单(1是，0不是)
     */
    private Integer pluginMenu;

    /**
     * 插件id
     */
    private String pluginId;

    /**
     * 插件界面app名称
     */
    private String pluginAppName;

    /**
     * 插件界面路径
     */
    private String pluginAppPath;

    /**
     * 插件根路由
     */
    private String pluginRootRouting;

    /**
     * 创建用户
     */
    @TableField(fill = FieldFill.INSERT)
    private String createUser;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private String gmtCreated;

    /**
     * 修改用户
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String modifiedUser;

    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String gmtModified;

    @TableField(exist = false)
    private List<Menu> children;

}
